// 类
// 类的属性和方法的修饰符
// static 静态方法  直接用类型调用 不需要实例化对象
// public 公共的   随意调用
// private 私有的 它就不能在声明它的类的外部访问
// protected  受保护的  在当前类的内和子类内部调用
class Car {
    //ts的 提前声明属性
  public  name: string
  private color: string
    speed:number
    constructor(name:string, color:string,speed) {
        this.name = name;
        this.color = color;
        this.speed=speed;
    }
    // ts的类型 函数的形参类型标注  返回值标注
    public run(km:number):void {
        console.log(this.name + km)
        // this.jia()
    } 
    private jia() { //私有属性和方法 只能在类的内部调用
        console.log("加油")
    }
    protected fly(){
      console.log("起飞")
    }
    static eat(){
      console.log("吃是静态方法")
    }
}
var binli = new Car("宾利欧陆", "蓝色",280);
binli.run(800)
// 静态方法的调用
Car.eat();


// 车的子类 继承车类
class Byd extends Car{
  city:string
  price:number
  readonly size:string
  constructor(city:string,price:number,size:string){
    super("比亚迪","红色",280)
    this.price=price;
    this.city=city;
    this.size=size
  }
  make(){
    this.fly()
  }
}
var byd1=new Byd("哈尔滨",19,"1999");
byd1.make()

// 接口限定类
interface IPhone{
   name:string,
   price:number,
   color:string,
   call(person:string):void,
   play(game:string):string
}
// 类实现接口
class Phone implements IPhone{
    name:string
    price:number
    color:string
    constructor( name:string,  price:number, color:string){
      this.name=name;
      this.price=price;
      this.color=color;
    }
    call(person:string):void{

    }
    play(game:string):string{
        return "游戏"
    }
}
let huawei=new Phone("华为P50",19999,"石墨黑");







